{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from sklearn.cluster import KMeans\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.preprocessing import OneHotEncoder\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression,LinearRegression\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.metrics import accuracy_score,confusion_matrix,mean_squared_error,recall_score,roc_auc_score\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "import joblib\n",
    "import matplotlib.pyplot as plt\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "data": {
      "text/plain": "     年龄(岁)  收入(万元)\n0       50      66\n1       44      51\n2       30      56\n3       46      50\n4       32      50\n..     ...     ...\n107     30      30\n108     32      29\n109     24      18\n110     24      15\n111     25      40\n\n[112 rows x 2 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>年龄(岁)</th>\n      <th>收入(万元)</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>50</td>\n      <td>66</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>44</td>\n      <td>51</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>30</td>\n      <td>56</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>46</td>\n      <td>50</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>32</td>\n      <td>50</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>107</th>\n      <td>30</td>\n      <td>30</td>\n    </tr>\n    <tr>\n      <th>108</th>\n      <td>32</td>\n      <td>29</td>\n    </tr>\n    <tr>\n      <th>109</th>\n      <td>24</td>\n      <td>18</td>\n    </tr>\n    <tr>\n      <th>110</th>\n      <td>24</td>\n      <td>15</td>\n    </tr>\n    <tr>\n      <th>111</th>\n      <td>25</td>\n      <td>40</td>\n    </tr>\n  </tbody>\n</table>\n<p>112 rows × 2 columns</p>\n</div>"
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_excel(\"C:\\\\Users\\\\Administrator\\\\Desktop\\\\月考练习算法题 (2)\\\\月考练习算法题\\\\第1套（修改2）\\\\专高6月考-01附件\\\\客户信息.xlsx\")\n",
    "df"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "data": {
      "text/plain": "   年龄(岁)  收入(万元)\n0     50      66\n1     44      51\n2     30      56\n3     46      50\n4     32      50",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>年龄(岁)</th>\n      <th>收入(万元)</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>50</td>\n      <td>66</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>44</td>\n      <td>51</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>30</td>\n      <td>56</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>46</td>\n      <td>50</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>32</td>\n      <td>50</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [
    {
     "data": {
      "text/plain": "年龄(岁)     37.5\n收入(万元)    48.5\ndtype: float64"
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# df.describe()\n",
    "df.mean()\n",
    "df.median()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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2xpJ7KNrrrkmZ/6vvfZa9ntW7iHHEMePH3ckOY2NjY7jOM6JEyecwYMHO+vWrcse8/bbbzuSnKampqiGGZnz18dxHOcv//IvnUceeSS6QcXQJZdc4vzrv/4r+6cP3WvkOOyhbidPnnQ+85nPOJs2bcpZE/bRJ3pbI8dhHy1btsy59tpre/yerXsotp98nC+dTkuShg8fLklqbm7WmTNnNGvWrOwxEydO1Lhx49TU1BTJGKN0/vp0++Uvf6lLL71UkyZNUm1trT766KMohhe5s2fPqr6+XqdOnVIqlWL/9OD8NerGHpIWLlyo22+/PWe/SPweOldva9TN9n30zjvvaPTo0br88ss1d+5cHT58WJK9eyh2F5brSWdnpxYtWqQbbrhBkyZNkiS1tbWppKREw4YNyzm2oqJCbW1tEYwyOj2tjyT9zd/8jcaPH6/Ro0frD3/4g77//e9r//79evHFFyMcbbh2796tVCql9vZ2XXzxxVq/fr1qamq0a9cu9s+f9bZGEntIkurr6/XWW29px44dF3yP30Nd+lojiX00depUPf/885owYYJaW1u1fPlyTZ8+XXv27LF2DxkRfCxcuFB79uzJOUeGT/S2Pt/+9rez//7sZz+rqqoq3XTTTTp48KCuuOKKsIcZiQkTJmjXrl1Kp9P693//dz3wwANqbGyMelix0tsa1dTUWL+Hjhw5okceeUSbNm1SWVlZ1MOJpYGske376Lbbbsv+e/LkyZo6darGjx+vX/3qVxoyZEiEI4tO7E+7PPzww3r55Ze1detWjRkzJnt7ZWWlTp8+rRMnTuQcf+zYMVVWVoY8yuj0tj49mTp1qiTpwIEDYQwtFkpKSnTllVdqypQpqqur07XXXqunnnqK/XOO3taoJ7btoebmZh0/flzXXXediouLVVxcrMbGRj399NMqLi5WRUWF9fuovzU6e/bsBfexbR+db9iwYbrqqqt04MABa38XxTb4cBxHDz/8sNavX68tW7aouro65/tTpkzR4MGDtXnz5uxt+/fv1+HDh3POVxeq/tanJ7t27ZIkVVVV5Xl08dXZ2amOjg7r909futeoJ7btoZtuukm7d+/Wrl27sl/XX3+95s6dm/237fuovzUaNGjQBfexbR+d78MPP9TBgwdVVVVl7++iqDNee7NgwQInmUw6r7zyitPa2pr9+uijj7LHPPTQQ864ceOcLVu2ODt37nRSqZSTSqUiHHV4+lufAwcOOI899pizc+dOp6Wlxfn1r3/tXH755c6MGTMiHnl4Hn30UaexsdFpaWlx/vCHPziPPvqok0gknN/97neO49i9f7r1tUbsoZ6dX7nBPrrQuWvEPnKcpUuXOq+88orT0tLi/P73v3dmzZrlXHrppc7x48cdx7FzD8U2+JDU49fq1auzx/zpT39yvvvd7zqXXHKJc9FFFzlf/epXndbW1ugGHaL+1ufw4cPOjBkznOHDhzulpaXOlVde6fz93/+9k06nox14iL71rW8548ePd0pKSpyRI0c6N910UzbwcBy790+3vtaIPdSz84MP9tGFzl0j9pHj3HPPPU5VVZVTUlLifPrTn3buuece58CBA9nv27iHEo7jONF85gIAAGwU25wPAABQmAg+AABAqAg+AABAqAg+AABAqAg+AABAqAg+AABAqAg+AABAqAg+AABAqAg+AABAqAg+AABAqAg+AABAqAg+AABAqP4/KSVnvFGTf2EAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 2.\n",
    "plt.scatter(df[\"年龄(岁)\"],df[\"收入(万元)\"])\n",
    "plt.show()\n",
    "# 结论：随着年纪增长，收入逐渐增多"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [
    {
     "data": {
      "text/plain": "     年龄(岁)\n66      36\n90      48\n62      32\n22      32\n85      28\n..     ...\n106     25\n14      50\n92      46\n51      26\n102     41\n\n[89 rows x 1 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>年龄(岁)</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>66</th>\n      <td>36</td>\n    </tr>\n    <tr>\n      <th>90</th>\n      <td>48</td>\n    </tr>\n    <tr>\n      <th>62</th>\n      <td>32</td>\n    </tr>\n    <tr>\n      <th>22</th>\n      <td>32</td>\n    </tr>\n    <tr>\n      <th>85</th>\n      <td>28</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>106</th>\n      <td>25</td>\n    </tr>\n    <tr>\n      <th>14</th>\n      <td>50</td>\n    </tr>\n    <tr>\n      <th>92</th>\n      <td>46</td>\n    </tr>\n    <tr>\n      <th>51</th>\n      <td>26</td>\n    </tr>\n    <tr>\n      <th>102</th>\n      <td>41</td>\n    </tr>\n  </tbody>\n</table>\n<p>89 rows × 1 columns</p>\n</div>"
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = df[['年龄(岁)']]\n",
    "y = df['收入(万元)']\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "X_train"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "data": {
      "text/plain": "LinearRegression()",
      "text/html": "<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LinearRegression</label><div class=\"sk-toggleable__content\"><pre>LinearRegression()</pre></div></div></div></div></div>"
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr = LinearRegression()\n",
    "lr.fit(X_train,y_train)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [
    {
     "data": {
      "text/plain": "array([48.6630278 , 44.70768984, 36.79701394, 51.29991976, 43.38924386,\n       35.47856796, 56.5737037 , 59.21059567, 51.29991976, 36.79701394,\n       39.43390591, 47.34458181, 32.84167599, 30.20478402, 60.52904165,\n       52.61836575, 34.16012197, 47.34458181, 48.6630278 , 53.93681173,\n       42.07079788, 57.89214968, 46.02613583])"
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred = lr.predict(X_test)\n",
    "y_pred"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "data": {
      "text/plain": "141.9626478666821"
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_squared_error(y_test,y_pred)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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Of7EE0/4guEHH3yg2bNnh/z7AgAfq1UqK/P+d+e5YR3PS0uZHJqAenVnY/v27brjjjt8z6dPn6577rlHO3fu1A033KCnnnpKN998c6j62HtRNH74P//zP90Oo5w/WbNjZ9tvf/vbuuaaa7Rnzx7fa/X19X5DTW1tbTp37pz69u0ri8Wifv36dfmay5cv1zPPPON7fuzYMe5sADBXUZF3eLqkxP+XPbvdGzRMHrZGdAo6bJw5c0Z//vOf9cILL/iODRkyRGvWrNEtt9yi/v37a8CAAVq/fn0o+9k7ERw/bG9vl8fj8d39ee2113T55Zf7tXn33Xd9kz5bW1tVVVWlwsJCpaWlyfpp8r/33nvV1tam06dPa/r06b73ut1uXXPNNXr77bd77MOjjz7aZc4GAJiuqMg7PE0FUXwq6LDRt29fv2WrHe6++27dfPPNOnjwoPLz831LNCMqguOHO3fu1MyZM2W1WpWUlKSJEyf22NZms6mtrU3V1dVdim+1t7fr1ltv1YgRIzR37lxdffXVfnU7LoQ7GwAixmpleSt8QroGcvTo0X7LMSOuY/ywuNgbLM4PHCaPH950002+EuOffPKJVq9erX79+vlW4bzwwguqqanRt7/9bV177bXdnmPv3r1atGiRrFarnn/+eX3ta1/TJ598ohUrVqi4uLhLe4/Ho9bWVl/9jZ7ubLjd7vBM0AUAQDG062uvdYwfdp6warebvuz14MGDevjhhzVu3Dj97//+r1+1z5kzZ2rUqFH61re+pQkTJqiqqkqGYWjHjh3693//d02cOFGTJ0/W1772Nb322msaOHCg/vKXv+jxxx/X/fffr7y8PO3evdvv67W2tur999+Xw+HQrl279OSTTyonJ8f32L59ux577DFfNVEAAMLBYhjdjS+El8vlUmZmppqammSz2fxeO3v2rGprazV69GilpaX1/otEoILoX//6V+3atUu33Xabhg4d2m2blpYW/fznP9edd96pjIwM/fznP9frr7+umTNn6pvf/Ga3w1FNTU167LHHdOedd+rqq68OWX9D9ncNAEgIF7p+ny9xwgYuir9rAEAwAg0b8T+MAgAAIoqwAQAATEXYAAAApiJsAAAAUxE2AACAqQgbJuko6HUxH330UZd6Gd1pb2+/aJuTJ0/6PW9tbdXp06cD6gcAAGYJaQVRfKaoqEh2u13P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I1yYLQ+Eh9VKYAeiDMMo4cJseQBAgiJshAuz5QEACYqwES7MlgcAJCjCRjgxWx4AkICYIBpuzJYHACQYwkYkMFseAJBAGEYBAACmImwAAABTETYAAICpCBsAAMBUhA0AAGAqwgYAADAVYQMAAJiKsAEAAExF2AAAAKaKigqihmFIklwuV4R7AgAAAtVx3e64jvckKsJGc3OzJMnhcES4JwAAIFjNzc3KzMzs8XWLcbE4Egbt7e06duyYMjIyZOm8/ToC4nK55HA4VFdXJ5vNFunuJCw+h+jA5xAd+Byig5mfg2EYam5u1ogRI5SU1PPMjKi4s5GUlCS73R7pbsQFm83GP+oowOcQHfgcogOfQ3Qw63O40B2NDkwQBQAApiJsAAAAUxE24kRqaqoef/xxpaamRrorCY3PITrwOUQHPofoEA2fQ1RMEAUAAPGLOxsAAMBUhA0AAGAqwgZwiT7++GP9+c9/1qlTpyLdFQCISoSNGMZFLvJeffVV5eTkaP78+bLb7Xr11VclSffff78sFovvcfnll0e4p0D4FBYWav369ZKk6dOn+/1buPHGGyPbOUQEYSNG9XSR279/vyZNmqSBAwdqyZIlF61Xj95ramrSggUL9Pbbb2vfvn169tlntWTJEklSdXW1fve73+nUqVM6deqU9uzZE+HeJobzL3JvvfWWcnNzNWTIEK1evTqyHUsgGzZs0BtvvOF7Xl1drX379vn+LWzdujWCvYt/Pf2iE+lrA2EjBvV0kXO73Zo2bZomTJig6upq1dTU+P7Hi9BzuVwqLS3V+PHjJUlf+tKXdOLECZ07d05/+9vf9NWvflUDBgzQgAEDlJGREeHexr/zL3KNjY2aPn26Zs+eraqqKm3YsEG7du2KcA/j38mTJ7V48WJdccUVkqT6+noZhqEvfOELvn8L/fr1i3Av41t3v+hExbXBQMw5cuSI8corr/ie79271+jfv7/x61//2hg4cKDxySefGIZhGH/961+N6667LlLdTCitra3GHXfcYXznO98x/vKXvxj9+/c3xowZY6SlpRk333yz8eGHH0a6i3HtxIkTxvDhw40rrrjCeOmll4w1a9YYn//854329nbDMAxjy5Ytxty5cyPcy/h3xx13GHfffbdx++23Gy+99JLhdDqNoUOHGiNHjjTS09ONb3/728bJkycj3c241dbWZthsNqO5udnveDRcG7izEYMcDofmzp0rSWpra9OaNWs0c+ZM7d27V3l5eUpPT5ckjR8/XjU1NZHsakLYu3evsrKytH37dv30pz9VTU2NrrjiCv3yl7/Ue++9p+TkZN11112R7mZcW7x4sWbOnKm8vDxJ3s+koKDAt7Hjl7/8Ze3evTuSXYx7u3bt0u9//3s99dRTvmMHDx7UF7/4Rf3ud7/Tu+++q9raWi1dujSCvYxv+/btU3t7u66++mr17dtXhYWFOnLkSFRcGwgbMazzRc7lcmn06NG+1y0Wi6xWKxNITTZ+/Hi9+eabGjt2rObPn6+5c+equrpa1157rcaOHau1a9dqx44dcrlcke5qXOruItf534LNZtOxY8ci0b2EcPbsWX3ve9/Tc8895zdkuHTpUu3YsUNf/OIXddVVV2nVqlUqLy+PYE/jW0+/6ETDtYGwEcM6X+SSk5O7lKNNS0tTS0tLhHqYGCwWiyZMmKCXX35ZTqdTH3/8sd/rw4YNU3t7uxoaGiLTwTjW00Wu878F/h2Ya/ny5Zo0aZKmTJlywXbDhg3TiRMn5Ha7w9SzxNLTLzrt7e0RvzYQNmJY54vcoEGD1NjY6NemublZKSkpEephfHvrrbd8q08kKSUlRRaLRcuWLdPGjRt9x6uqqpSUlCSHwxGJbsa1ni5ynf8t8O/AXBs3btTWrVt9k0A3btyoBQsWqKCgQH/84x997aqqqjR8+HD2SgmTjl90srKyIn5tSA7bV0LIvPXWW/rtb3+rVatWSfrsIpebm6v/+q//8rWrra2V2+3WoEGDItXVuDZu3Di98MILGjt2rL7xjW/okUce0U033aQJEybokUce0fDhw+XxeHTfffdp3rx5vvFShM7GjRvV2NioAQMGSJJaWlq0efNmSdJXvvIVX7s9e/Zo5MiRkehiQqisrNS5c+d8zx988EHl5eXp7NmzeuCBB7RmzRp99NFHWrp0qb7//e9HsKfxbcmSJbrmmms0Z84cSZ/9onPVVVdF/toQ1umoCIljx44ZNpvNeP75540jR44Y8+bNMwoLC422tjZj6NChxosvvmgYhmHMnz/fmDp1aoR7G9/efPNN48orrzQyMjKM4uJi4x//+IdhGIbx8MMPG5mZmcagQYOM+++/3zh9+nSEexqf6urqjNraWt/jW9/6lrFq1SqjsbHRSEtLM3bs2GG0trYahYWFxr333hvp7iaMjtUora2txne/+12jX79+RlZWlrFs2TKjra0t0t2LW7/85S+N0aNHGzt37jTeeOMNY9y4ccYdd9wRFdcGwkaM6ukit3XrViM9Pd0YPHiwMXToUONvf/tbhHsKhE/HRc4wDOO5554z+vTpYwwcONAYPXq0cfz48ch2DgiDnn7RifS1gS3m49Dx48e1e/du5eXlafDgwZHuDhAxtbW1OnjwoPLz89W/f/9IdweIqEheGwgbAADAVKxGAQAApiJsAAAAUxE2AACAqQgbAADAVIQNAABgKsIGAAAwFWEDAACYirABAABMRdgAAACm+v8fs5KDn2yHEgAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 让图片中可以显示中文\n",
    "plt.rcParams['font.sans-serif'] = 'SimHei'\n",
    "# 让图片中可以显示负号\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "plt.scatter(X_test,y_test,color='red',label='真实值')\n",
    "plt.scatter(X_test,y_pred,color='green',label='测试值')\n",
    "plt.legend()\n",
    "plt.show()\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "data": {
      "text/plain": "     年龄(岁)  收入(万元) label\n0       50      66   高净值\n1       44      51   高净值\n2       30      56   高净值\n3       46      50   高净值\n4       32      50   高净值\n..     ...     ...   ...\n107     30      30   低净值\n108     32      29   低净值\n109     24      18   低净值\n110     24      15   低净值\n111     25      40   低净值\n\n[112 rows x 3 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>年龄(岁)</th>\n      <th>收入(万元)</th>\n      <th>label</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>50</td>\n      <td>66</td>\n      <td>高净值</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>44</td>\n      <td>51</td>\n      <td>高净值</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>30</td>\n      <td>56</td>\n      <td>高净值</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>46</td>\n      <td>50</td>\n      <td>高净值</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>32</td>\n      <td>50</td>\n      <td>高净值</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>107</th>\n      <td>30</td>\n      <td>30</td>\n      <td>低净值</td>\n    </tr>\n    <tr>\n      <th>108</th>\n      <td>32</td>\n      <td>29</td>\n      <td>低净值</td>\n    </tr>\n    <tr>\n      <th>109</th>\n      <td>24</td>\n      <td>18</td>\n      <td>低净值</td>\n    </tr>\n    <tr>\n      <th>110</th>\n      <td>24</td>\n      <td>15</td>\n      <td>低净值</td>\n    </tr>\n    <tr>\n      <th>111</th>\n      <td>25</td>\n      <td>40</td>\n      <td>低净值</td>\n    </tr>\n  </tbody>\n</table>\n<p>112 rows × 3 columns</p>\n</div>"
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 5.\n",
    "df[\"label\"] = df[\"收入(万元)\"].map(lambda  x: '高净值' if x >= 50 else '低净值')\n",
    "df"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     年龄(岁)  收入(万元) label cluster_label\n",
      "0       50      66   高净值           高净值\n",
      "1       44      51   高净值           高净值\n",
      "2       30      56   高净值           高净值\n",
      "3       46      50   高净值           高净值\n",
      "4       32      50   高净值           高净值\n",
      "..     ...     ...   ...           ...\n",
      "107     30      30   低净值           低净值\n",
      "108     32      29   低净值           低净值\n",
      "109     24      18   低净值           低净值\n",
      "110     24      15   低净值           低净值\n",
      "111     25      40   低净值           低净值\n",
      "\n",
      "[112 rows x 4 columns]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "F:\\python38\\lib\\site-packages\\sklearn\\cluster\\_kmeans.py:1416: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning\n",
      "  super()._check_params_vs_input(X, default_n_init=10)\n"
     ]
    }
   ],
   "source": [
    "X = df[[\"年龄(岁)\",\"收入(万元)\"]]\n",
    "# 注意\n",
    "kmeans = KMeans(n_clusters=2, random_state=0).fit(X)\n",
    "\n",
    "# 获取簇的标签\n",
    "labels = kmeans.labels_\n",
    "\n",
    "# 假设我们将簇0视为“低净值”，簇1视为“高净值”\n",
    "df['cluster_label'] = ['低净值' if label == 0 else '高净值' for label in labels]\n",
    "\n",
    "# 查看结果\n",
    "print(df)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "outputs": [
    {
     "data": {
      "text/plain": "     年龄(岁)  收入(万元) label\n0       50      66   高净值\n1       44      51   高净值\n2       30      56   高净值\n3       46      50   高净值\n4       32      50   高净值\n..     ...     ...   ...\n107     30      30   低净值\n108     32      29   低净值\n109     24      18   低净值\n110     24      15   低净值\n111     25      40   低净值\n\n[112 rows x 3 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>年龄(岁)</th>\n      <th>收入(万元)</th>\n      <th>label</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>50</td>\n      <td>66</td>\n      <td>高净值</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>44</td>\n      <td>51</td>\n      <td>高净值</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>30</td>\n      <td>56</td>\n      <td>高净值</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>46</td>\n      <td>50</td>\n      <td>高净值</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>32</td>\n      <td>50</td>\n      <td>高净值</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>107</th>\n      <td>30</td>\n      <td>30</td>\n      <td>低净值</td>\n    </tr>\n    <tr>\n      <th>108</th>\n      <td>32</td>\n      <td>29</td>\n      <td>低净值</td>\n    </tr>\n    <tr>\n      <th>109</th>\n      <td>24</td>\n      <td>18</td>\n      <td>低净值</td>\n    </tr>\n    <tr>\n      <th>110</th>\n      <td>24</td>\n      <td>15</td>\n      <td>低净值</td>\n    </tr>\n    <tr>\n      <th>111</th>\n      <td>25</td>\n      <td>40</td>\n      <td>低净值</td>\n    </tr>\n  </tbody>\n</table>\n<p>112 rows × 3 columns</p>\n</div>"
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}